/**
 * 保留小数位数
 * @param v string|number 要处理的数字
 * @param n int >=0 最多保留小数位数
 * @param op int 多出位数处理方式
 * 		0:四舍五入, 1:向上取值, -1:向下取值
 * @param pad boolean 小数位数不足是否补0
 * @return string
 */
$.bcFix = function(v, n=2, op=0, pad=true){
	v+=''; let _=v[0]==='-'?'-':''; if(_) v=v.slice(1);
	let [i,d]=v.split('.'), D;  i=i.replace(/^0+/,'');
	d=d?d.replace(/0+$/,''):''; if(_ && !i && !d) _='';
	if((D=d.length)===n) return _+(i||0)+(n?'.'+d:'');
	if(D<n) return _+(i||0)+(pad?$.pad(d,n,'0',false):(n?'.'+d:''));
	if(n) i+=d.slice(0,n); let a=op<0?_:(op>0?!_:(d[n]>(_?5:4))); d='';
	if(a) i=$.bcAddOne(i);  if(n){ d=i.slice(-n); i=i.slice(0,-n); }
	if(_ && !(i+d).replace(/0/g,'')) _=''; // 负数,处理后为0, 移除负号
	if(d && !pad) d=d.replace(/0+$/,'');  return _+(i||0)+(d?'.'+d:'');
};
